#!/bin/sh
set -e

TESTDIR="$(readlink -f "$(dirname "$0")")"
. "$TESTDIR/framework"

setupenvironment
configarchitecture 'amd64'

# apt-extracttemplates needs this
insertinstalledpackage 'pkg-with-template' 'amd64' '1.0'

# build a simple package that contains a config and a template
mkdir -p DEBIAN
CONFIG_STR="#!/bin/sh
random shell stuff
"
echo "$CONFIG_STR" > DEBIAN/config
chmod 755 DEBIAN/config

testrun() {
	local TEMPLATE_STR='Template: foo/bar
Type: string
Description: Some bar var
'
	echo "$TEMPLATE_STR" > DEBIAN/templates
	buildsimplenativepackage "$1" 'amd64' '0.8.15' 'stable' "$2" 'pkg with template' '' '' './DEBIAN'

	cp dpkg.status rootdir/var/lib/dpkg/status
	insertinstalledpackage 'debconf' 'amd64' '3'

	# ensure we get the right stuff out of the file
	rm -rf extracttemplates-out rootdir/var/cache/apt
	mkdir extracttemplates-out
	testsuccess aptextracttemplates -t ./extracttemplates-out incoming/${1}*.deb
	OUT='rootdir/tmp/testsuccess.output'
	testequal "$1" cut -f1 -d' ' $OUT
	if [ -n "$2" ]; then
		testequal '' cut -s -f2 -d' ' $OUT
	else
		testequal '1.0' cut -f2 -d' ' $OUT
	fi
	TEMPLATE=$(cut -f3 -d' ' $OUT)
	testfileequal "$TEMPLATE" "$TEMPLATE_STR"
	CONFIG=$(cut -f4 -d' ' $OUT)
	testfileequal "$CONFIG" "$CONFIG_STR"
	msgtest 'No extra files or directories in extraction directory'
	if [ "$(find ./extracttemplates-out | wc -l)" = '3' ]; then
		msgpass
	else
		msgfail
		ls -l ./extracttemplates-out
	fi

	# ensure that the format of the output string has the right number of dots
	for s in "$CONFIG" "$TEMPLATE"; do
		NR_DOTS=$(basename "$s" | tr -c -d '.')
		testequal '..' echo $NR_DOTS
	done

	if [ -n "$2" ]; then
		rm -rf extracttemplates-out rootdir/var/cache/apt
		mkdir extracttemplates-out
		cp dpkg.status rootdir/var/lib/dpkg/status
		insertinstalledpackage 'debconf' 'amd64' '1'
		testempty aptextracttemplates -t ./extracttemplates-out incoming/${1}*.deb
	fi
}

cp rootdir/var/lib/dpkg/status dpkg.status
testrun 'pkg-with-template' ''
testrun 'pkg-with-template-depends' 'Depends: debconf (>= 2)'
testrun 'pkg-with-template-predepends' 'Pre-Depends: debconf (>= 2)'

# test with no debconf installed
cp dpkg.status rootdir/var/lib/dpkg/status
testfailure aptextracttemplates -t ./extracttemplates-out incoming/pkg-with-template-depends*.deb
testfileequal 'rootdir/tmp/testfailure.output' 'E: Cannot get debconf version. Is debconf installed?'
